import { App, inject, InjectionKey, Plugin } from 'vue';
import { ApiCache } from './apiCache';

export interface ApiCacheOptions {
  defaultTTL?: number;
}

export const ApiCacheSymbol: InjectionKey<ApiCache> = Symbol('ApiCache');

const ApiCachePlugin: Plugin = {
  install(app: App, options: ApiCacheOptions = {}) {
    const apiCache = new ApiCache(options.defaultTTL);
    app.config.globalProperties.$apiCache = apiCache;
    app.provide(ApiCacheSymbol, apiCache);
  }
};

export function useApiCache(): ApiCache {
  const apiCache = inject(ApiCacheSymbol);
  if (!apiCache) {
    throw new Error('useApiCache must be used after installing ApiCachePlugin.');
  }
  return apiCache;
}

export default ApiCachePlugin;
